package com.itheima.controller;

import com.itheima.common.Result;
import com.itheima.pojo.Brand;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.*;

/**
 * 演示restful风格、设置响应状态码和响应头、统一响应结果Result类、全局异常处理
 */
@RestController
@Slf4j
@RequestMapping("/brand")
public class BrandController {
    //----------------------------演示restful风格--------------------------
    /**
     * 根据id查询
     * @param id 请求参数
     * 访问路径示例：/brand/1
     * @PathVariable: 路径变量，将路径中占位符的值赋值给变量，要求占位符的名称和变量名一样
     *//*
    //@RequestMapping(value = "/brand/{id}",method = RequestMethod.GET)
    @GetMapping("{id}")
    public String selectById(@PathVariable Integer id){
        log.info("selectById--->id：{}",id);
        return "selectById查询成功--->"+id;
    }

    *//**
     *删除品牌
     * @param id 请求参数
     * 访问路径示例：/brand/1
     *//*
    //@RequestMapping(value = "/brand/{id}",method = RequestMethod.DELETE)
    @DeleteMapping("{id}")
    public String delete(@PathVariable Integer id){
        log.info("delete--->id：{}",id);
        return "delete删除成功--->"+id;
    }

    *//**
     *修改品牌
     * 访问路径示例：/brand
     * 请求体：
     *      {
     *         "id":5,
     *          "brandName":"华为",
     *        	"companyName":"华为科技有限公司"
     *      }
     *//*
    *//*@PutMapping("/brand")
    public String update(@RequestBody Brand brand){
        log.info("update--->brand：{}",brand);
        return "update修改成功";
    }*//*

    *//**
     *修改品牌
     * 访问路径示例：/brand/2
     * 请求体：
     *      {
     *          "brandName":"华为",
     * 	        "companyName":"华为科技有限公司"
     *      }
     *//*
    @PutMapping("{id}")
    public String update(@PathVariable Integer id,@RequestBody Brand brand){
        brand.setId(id);
        log.info("update--->brand：{}",brand);
        return "update修改成功";
    }

    *//**
     *保存品牌
     * 访问路径示例：/brand
     *//*
    @PostMapping
    public String save(@RequestBody Brand brand){
        log.info("save--->brand：{}",brand);
        return "save保存成功";
    }*/

    //--------------------------演示设置响应状态码和响应头--------------
    @GetMapping("/s1")
    @ResponseStatus(HttpStatus.NO_CONTENT)
    public void s1(){
        log.info("s1...");
    }

    @GetMapping("/s2")
    public ResponseEntity s2(){
        log.info("s2...");
        //封装响应体内容
        Brand body=new Brand();

        //设置响应头
        MultiValueMap header=new LinkedMultiValueMap();
        header.add("myHeader","big");

        return new ResponseEntity(body,header,HttpStatus.OK);

    }
    //---------------------------统一响应结果Result类----------------------------
    /**
     * 根据id查询
     * @param id 请求参数
     * 访问路径示例：/brand/1
     * @PathVariable: 路径变量，将路径中占位符的值赋值给变量，要求占位符的名称和变量名一样
     */
    //@RequestMapping(value = "/brand/{id}",method = RequestMethod.GET)
    @GetMapping("{id}")
    public Result selectById(@PathVariable Integer id){
        log.info("selectById--->id：{}",id);
        return new Result(2001,"查询成功",new Brand());
    }

    /**
     *删除品牌
     * @param id 请求参数
     * 访问路径示例：/brand/1
     */
    //@RequestMapping(value = "/brand/{id}",method = RequestMethod.DELETE)
    @DeleteMapping("{id}")
    public Result delete(@PathVariable Integer id){
        log.info("delete--->id：{}",id);
        int i=1/0;
        return new Result(2002,"删除成功",null);
    }

    /**
     *修改品牌
     * 访问路径示例：/brand
     * 请求体：
     *      {
     *         "id":5,
     *          "brandName":"华为",
     *        	"companyName":"华为科技有限公司"
     *      }
     */
    /*@PutMapping("/brand")
    public String update(@RequestBody Brand brand){
        log.info("update--->brand：{}",brand);
        return "update修改成功";
    }*/

    /**
     *修改品牌
     * 访问路径示例：/brand/2
     * 请求体：
     *      {
     *          "brandName":"华为",
     * 	        "companyName":"华为科技有限公司"
     *      }
     */
    @PutMapping("{id}")
    public Result update(@PathVariable Integer id,@RequestBody Brand brand){
        brand.setId(id);
        log.info("update--->brand：{}",brand);
        return new Result(2003,"修改成功",null);
    }

    /**
     *保存品牌
     * 访问路径示例：/brand
     */
    @PostMapping
    public Result save(@RequestBody Brand brand){
        log.info("save--->brand：{}",brand);
        return new Result(2004,"保存成功",null);
    }
}
